package com.example.backend_422.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.example.backend_422.common.Result;
import com.example.backend_422.common.Utils;
import com.example.backend_422.entity.House;
import com.example.backend_422.entity.Rent;
import com.example.backend_422.mapper.HouseMapper;
import com.example.backend_422.mapper.RentMapper;
import com.example.backend_422.service.RentService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author xwyzsn
 * @since 2023-04-22
 */
@Service
public class RentServiceImpl extends ServiceImpl<RentMapper, Rent> implements RentService {

    @Autowired
    private RentMapper rentMapper; // 自动装配, 通过 @Autowired 自动装配 RentMapper

    /**
     * 根据用户id获取租赁信息
     * @param userId
     * @return
     */
    public Result getRentByUserId(Integer userId) {
        QueryWrapper<Rent> wrapper = new QueryWrapper<>(); // 构造查询条件
        wrapper.eq("user_id",userId); // 查询条件 user_id = userId
        return Result.succ(rentMapper.selectList(wrapper));

    }

    /**
     * 根据房东id获取租赁信息
     * @param landlordId
     * @return
     */
    public Result getByLandlordId(Integer landlordId) {
        QueryWrapper<Rent> wrapper = new QueryWrapper<>();// 构造查询条件
        wrapper.eq("landlord_id",landlordId); // 查询条件 landlord_id = landlordId
        return Result.succ(rentMapper.selectList(wrapper)); // 返回查询结果
    }

    /**
     * 根据租赁id删除租赁信息
     * @param rentId
     * @return
     */
    public Result setRentStatus(Integer houseId, String status,Integer rentId) {
        // 根据租赁id修改租赁状态
        UpdateWrapper<Rent> wrapper = new UpdateWrapper<>();
        wrapper.eq("rent_id",rentId);// 查询条件 rent_id = rentId
        wrapper.set("status",status); // 修改状态
        rentMapper.update(null,wrapper); // 执行修改
        return Result.succ("success");
    }

    /**
     * 根据landlordId获取取消租赁信息
     * @param  landlordId
     * @return
     */
    public Result getQuitOrder(Integer landlordId) {
        QueryWrapper<Rent> queryWrapper = new QueryWrapper<>();// 构造查询条件
        queryWrapper.eq("landlord_id",landlordId); // 查询条件 landlord_id = landlordId
        queryWrapper.eq("status","退租待确认"); // 查询条件 status = 退租待确认
        return  Result.succ(rentMapper.selectList(queryWrapper)); // 返回查询结果
    }
    @Autowired
    private  Utils utils; // 自动装配, 通过 @Autowired 自动装配 Utils

    @Autowired
    private HouseMapper houseMapper; // 自动装配, 通过 @Autowired 自动装配 HouseMapper


    /**
     * 确认退租
     * @param endTime
     * @param status
     * @param rentId
     * @return
     */
    public Result confirmQuit(String endTime, String status, Integer rentId,Integer houseId) {
        // 根据租赁id修改租赁状态
        UpdateWrapper<Rent> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("rent_id",rentId); // 查询条件 rent_id = rentId
        updateWrapper.set("end_time",utils.stringToDate(endTime)); // 修改结束时间
        updateWrapper.set("status",status); // 修改状态
        if(status.equals("已结束")){
            // 根据房屋id修改房屋状态
            UpdateWrapper<House> houseUpdateWrapper = new UpdateWrapper<>();
            // 查询条件 house_id = houseId
            houseUpdateWrapper.eq("house_id",houseId);
            // 修改状态
            houseUpdateWrapper.set("status","未租");
            // 房屋表执行修改
            houseMapper.update(null,houseUpdateWrapper);
        }
        // 租赁表执行修改
        rentMapper.update(null,updateWrapper);
        return Result.succ("success");
    }
}
